অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং কি?
Node.js , I/O .
এই নির্বিঘ্ন পদ্ধতির সাহায্যে Node.js কে হাজার হাজার সমবর্তী সংযোগগুলি দক্ষতার সাথে পরিচালনা করতে সক্ষম করে।
সিঙ্ক্রোনাইজেশন
সম্পূর্ণ না হওয়া পর্যন্ত কার্যকলাপ ব্লক করুন
বুঝতে সহজ
বিলম্ব ঘটাচ্ছে
readFileSync এর মত ফাংশন ব্যবহার করে
অসিঙ্ক্রোনাস
বিরামহীন অপারেশন
চমৎকার কর্মক্ষমতা
এটি মোকাবেলা করা খুব জটিল
কলব্যাক, প্রতিশ্রুতি বা অ্যাসিঙ্ক/অপেক্ষা ব্যবহার করে
সিঙ্ক্রোনাস বনাম অ্যাসিঙ্ক্রোনাস: উদাহরণ
সিঙ্ক্রোনাস ফাইল রিডিং
const fs = require('fs');
console.log('1. Starting sync read...');
const data = fs.readFileSync('myfile.txt', 'utf8');
console.log('2. File contents:', data);
console.log('3. Done reading file');
আউটপুট ক্রম হল: 1 → 2 → 3 (প্রতিটি ধাপের মধ্যে বাধা দেয়)
অ্যাসিঙ্ক্রোনাস ফাইল রিডিং
const fs = require('fs');
console.log('1. Starting async read...');
fs.readFile('myfile.txt', 'utf8', (err, data) => {
if (err) throw err;
console.log('2. File contents:', data);
});
console.log('3. Done starting read operation');
আউটপুট অর্ডার: 1 → 3 → 2 (ফাইলটি পড়া না হওয়া পর্যন্ত অপেক্ষা করে না)
কলব্যাক জাহান্নাম এড়ানো
সমস্যা: নেস্টেড কলব্যাক (কলব্যাক হেল)
getUser(userId, (err, user) => {
if (err) return handleError(err);
getOrders(user.id, (err, orders) => {
if (err) return handleError(err);
processOrders(orders, (err) => {
if (err) return handleError(err);
console.log('All done!');
});
});
});
সমাধান: প্রতিশ্রুতি ব্যবহার করুন
getUser(userId)
.then(user => getOrders(user.id))
.then(orders => processOrders(orders))
.then(() => console.log('All done!'))
.catch(handleError);
আরও ভাল: Async/অপেক্ষা করুন
async function processUser(userId) {
try {
const user = await getUser(userId);
const orders = await getOrders(user.id);
await processOrders(orders);
console.log('All done!');
} catch (err) {
handleError(err);
}
}
আধুনিক অ্যাসিঙ্ক্রোনাস পদ্ধতি
1. প্রতিশ্রুতি
const fs = require('fs').promises;
console.log('1. Reading file...');
fs.readFile('myfile.txt', 'utf8')
.then(data => {
console.log('3. File content:', data);
})
.catch(err => console.error('Error:', err));
console.log('2. This runs before file is read!');
2. অ্যাসিঙ্ক/অপেক্ষা করুন (প্রস্তাবিত)
async function readFiles() {
try {
console.log('1. Starting to read files...');
const data1 = await fs.readFile('file1.txt', 'utf8');
const data2 = await fs.readFile('file2.txt', 'utf8');
console.log('2. Files read successfully!');
return { data1, data2 };
} catch (error) {
console.error('Error reading files:', error);
}
}
সর্বোত্তম অনুশীলন
এটা করো
// Use async/await for better readability
async function getUserData(userId) {
try {
const user = await User.findById(userId);
const orders = await Order.find({ userId });
return { user, orders };
} catch (error) {
console.error('Failed to fetch user data:', error);
throw error; // Re-throw or handle appropriately
}
}
এটা করবেন না
// Nested callbacks are hard to read and maintain
User.findById(userId, (err, user) => {
if (err) return console.error(err);
Order.find({ userId }, (err, orders) => {
if (err) return console.error(err);
// Process orders...
});
});
গুরুত্বপূর্ণ নোট:
- ভাল পঠনযোগ্যতার জন্য async/await ব্যবহার করুন
- সর্বদা চেষ্টা/ক্যাচ দিয়ে ত্রুটিগুলি পরিচালনা করুন
- Promise.all
- সিঙ্ক্রোনাস এবং অ্যাসিঙ্ক্রোনাস কোড মোড মিশ্রিত করবেন না
- প্রতিশ্রুতি অপেক্ষা করতে ভুলবেন না
সমান্তরাল অপারেশন
উদাহরণ: সমান্তরাল অপারেশন
// Run multiple async operations in parallel
async function fetchAllData() {
try {
const [users, products, orders] = await Promise.all([
User.find(),
Product.find(),
Order.find()
]);
return { users, products, orders };
} catch (error) {
console.error('Error fetching data:', error);
throw error;
}
}
Promise.all , .
কেন অ্যাসিঙ্ক্রোনাস কোড ব্যবহার করবেন?
অ্যাসিঙ্ক্রোনাস কোড Node.js কে ফাইল বা ডাটাবেস অ্যাক্সেসের মতো ধীরগতির ক্রিয়াকলাপের জন্য অপেক্ষা না করে একসাথে একাধিক অনুরোধ পরিচালনা করতে দেয়।
এটি Node.js সার্ভার এবং রিয়েল-টাইম অ্যাপ্লিকেশনের জন্য আদর্শ করে তোলে।
উচ্চ কর্মক্ষমতা
একযোগে একাধিক অনুরোধ পরিচালনা করে
পরিমাপযোগ্যতা
কম সংস্থান সহ আরও সংযোগ পরিচালনা করে
দ্রুত প্রতিক্রিয়া
ধীর I/O ক্রিয়াকলাপগুলির জন্য অপেক্ষা নেই৷
রিয়েল টাইম অ্যাপ্লিকেশন
চ্যাট, গেমস এবং সহযোগিতার সরঞ্জামগুলির জন্য আদর্শ
সারাংশ
Node.js I/O
আধুনিক অ্যাসিঙ্ক্রোনাস কোড প্রতিশ্রুতি সহ async/await ব্যবহার করে
সর্বদা অ্যাসিঙ্ক্রোনাস অপারেশনে ত্রুটিগুলি পরিচালনা করুন৷
সমান্তরাল অপারেশনের জন্য Promise.all ব্যবহার করুন
সঠিক অ্যাসিঙ্ক্রোনাস পদ্ধতির সাথে কলব্যাক হেল এড়িয়ে চলুন
মূল পয়েন্ট:
- Async/await পঠনযোগ্যতা উন্নত করে
- Promise.all
- প্রতিশ্রুতি কলব্যাকের চেয়ে ভাল কাঠামো প্রদান করে
- সর্বদা ত্রুটি হ্যান্ডলিং বাস্তবায়ন
- বিজোড় I/O হল Node.js এর মূল শক্তি
অনুশীলন করুন
সঠিক শব্দ চয়ন করুন।
Node.js I/O ______একটি প্রোগ্রামিং মডেল ব্যবহার করে।